package filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import entity.User;

/**
 * <li>过滤器
 */
//@WebFilter("/*")
public class AutoLoginFilter implements Filter {

	public void doFilter(
			ServletRequest req, 			// 过滤请求
			ServletResponse response, 		// 过滤响应
			FilterChain chain				// 过滤器链
			) throws IOException, ServletException {
		// 做登录校验的预处理业务 
		// 需要注意的是，过滤器的Request对象是不再协议的，需要强制下转型
		HttpServletRequest request = (HttpServletRequest) req;
		//获得一个名为autologin的cookie，cookie本质上是一个键值对集合的数据结构
		Cookie[] cookies = request.getCookies();
		String autologin = null;
		// 如果cookie不空，则遍历cookie，业务上，如果拿到了自动登录信息，则初始化autologin
		for (int i = 0; cookies != null && i < cookies.length; i++) {
			if ("autologin".equals(cookies[i].getName())) { // 用名来判断 
				autologin = cookies[i].getValue();			// 取值来用
				break;
			}
		}
		
		// 检查是否有登录信息
		if (autologin != null) {
			//做自动登录，【业务上，这个值是两个部分，即用户名和密码】
			String[] parts = autologin.split("-");
			String username = parts[0];
			String password = parts[1];
			//检查用户名和密码
			if ("fhzheng".equals(username) && "123546".equals(password)) {
				//登录成功则将用户状态存入session域
				User user = new User();
				user.setUsername(username);
				user.setPassword(password);
				request.getSession().setAttribute("user", user);
			}
		}
				
		//做完预处理工作后，下一步是放行
		chain.doFilter(request, response);
	}

}
